// 343. 整数拆分
// 给定一个正整数 n ，将其拆分为 k 个 正整数 的和（ k >= 2 ），并使这些整数的乘积最大化。

// 返回 你可以获得的最大乘积 。

// 示例 1:

// 输入: n = 2
// 输出: 1
// 解释: 2 = 1 + 1, 1 × 1 = 1。
// 思路：一个是j * (i - j) 直接相乘。一个是j * dp[i - j]，相当于是拆分(i - j)
/**
 * @param {number} n
 * @return {number}
 */
 var integerBreak = function(n) {
     //dp[i] 为正整数 i 拆分后的结果的最大乘积
    let dp=new Array(n+1).fill(1);
    for(let i=3;i<=n;i++){
        for(let j=0;j<i-1;j++){
            // 这里的 j 其实最大值为 i-j,再大只不过是重复而已，
            //并且，在本题中，我们分析 dp[0], dp[1]都是无意义的，
            //j 最大到 i-j,就不会用到 dp[0]与dp[1]
            dp[i]=Math.max(dp[i],j*(i-j),dp[i-j]*j);
            // j * (i - j) 是单纯的把整数 i 拆分为两个数 也就是 i,i-j ，再相乘
            //而j * dp[i - j]是将 i 拆分成两个以及两个以上的个数,再相乘。
        }
    }
    return dp[n];
};